#ifndef __EVENTFD_H__
#define __EVENTFD_H__

#include <functional>
#include <iostream>

using std::function;
using std::bind;
using std::cout;
using std::endl;

class EventFd
{
    using EventFdCallback = function<void()>;
public:
    EventFd(EventFdCallback &&cb);
    ~EventFd();

    void start();
    void stop();

    //handleRead中执行read操作
    void handleRead();
    //wakeup中执行write操作
    void wakeup();

private:
    int createEventFd();

private:
    int _evtfd;//eventfd系统调用返回的文件描述符
    bool _isStarted;//标志EventFd对象是否运行标志
    EventFdCallback _cb;//执行的任务

};

#endif
